package MyOffer.JavaGuide;

/**
 * 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并 不确定，而是在程序运行期间才确定.
 * 即一个引用变量到底会指向哪个类的实例对象，该引用变量发出 的方法调用到底是哪个类中实现的方法，必须在由程序运行期间才能决定。
 * 在 Java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接 口中同一方法)。
 */
public class PolymorphismTest1 {

    public static void main(String[] args) {
        MyInterface myInterface1 = new MyImplement1();
        MyInterface myInterface2 = new MyImplement2();

        PolymorphismTest1 polymorphismTest = new PolymorphismTest1();

        polymorphismTest.testPolymorphism(new MyImplement1());
        polymorphismTest.testPolymorphism(new MyImplement2());
    }

    //测试多态 参数具体实例对象不确定
    public void testPolymorphism(MyInterface i){
        i.test();
    }
}

interface MyInterface{
    void test();
}

class MyImplement1 implements MyInterface{

    @Override
    public void test() {
        System.out.println("MyImplement1");
    }
}

class MyImplement2 implements MyInterface{

    @Override
    public void test() {
        System.out.println("MyImplement2");
    }
}